/**
 * mixin不是继承也不是接口,而是一种全新特性
 * 1.通过mixin来定义,可以实现类似于多继承的功能(个人认为偏向于共有方法的抽取)
 * 2.其他类可以通过with来继承mixin类中的成员变量或方法,例如 class C with A,B {...}
 * 3.mixin可以和abstract来结合使用
 * 4.可以通过on来指定,可以混入mixin类的基类
 *    例如 mixin B on Person {...}
 *    class C with B  //编译器报错,C类必须要么继承Person类,要么也混入了Person类
 *
 *    //正确写法
 *    class C extends Person with B
 *    //或
 *    class C with Person, B //Person类必须要放在B类前
 *
 * 5.作为mixin的类只能继承于Object类
 * 6.mixin类不能有构造方法
 * 7.混入的多个mixin类,同名方法,后混入的会覆盖前混入的
 * 8.mixin类是其超类的子类
 */

abstract mixin class A {
  int age = 18;

  eat();

  printA() {
    print('A');
  }
}

mixin B on A {
  String name = '张飞';

  printA() {
    print('B');
  }
}

class C with A, B {
  @override
  eat() {
    // TODO: implement eat
    throw UnimplementedError();
  }
}
